#!/bin/bash

# ********************************************
# This is part of "create_image" script
# Do not execute !!
# ********************************************

. params.sh

_LOGFILE="/install.log"

export DEBIAN_FRONTEND=noninteractive

#*********************
# ** CONFIGURE NETWORK
#*********************
set_network() {

# ** SET hostname
echo ${HOSTNAME} > /etc/hostname

return 0

mkdir -p /etc/network
cat >> /etc/network/interfaces << _EOF_
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
_EOF_

}


# *************************************************
# ** Some tricks to make everything work
# *************************************************
do_tricks() {

_DST=`lsb_release -si`

cat > /etc/modules << _EOF_
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

## Display and GPU
#ump
#mali
##mali_drm
## WiFi
#8192cu
#8188eu
8189es
## GPIO
#gpio-sunxi
_EOF_

# ADJUST rc.local for some tuning
cat > /etc/rc.local << _EOF_
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

echo 0 > /proc/sys/kernel/hung_task_timeout_secs

dmesg -n 1

_EOF_

echo "exit 0" >> /etc/rc.local


if [ ! "${ONLY_BASE}" = "yes" ] ; then
# *****************************
# Setup tmux to show the cursor
cat > /root/.tmux.conf << _EOF_
setw -ga terminal-overrides ',*:Cc=\E[?120;%p1%s;240c:Cr=\E[?120;0;240c:civis=\E[?25l:cnorm=\E[?25h:cvvis=\E[?25h,'
set -g status-bg black
set -g status-fg white
_EOF_

cat > /home/$USER/.tmux.conf << _EOF_
setw -ga terminal-overrides ',*:Cc=\E[?120;%p1%s;240c:Cr=\E[?120;0;240c:civis=\E[?25l:cnorm=\E[?25h:cvvis=\E[?25h,'
set -g status-bg black
set -g status-fg white
_EOF_
fi

#*********************
# WARNING TO RESIZE FS
cat > /usr/local/bin/fs_resize_warning << _EOF_
#!/bin/sh

echo -e "\033[31m\033[1m***********************************************"
echo -e "WARNING: TO RESIZE FILESYSTEM RUN:"
echo -e "sudo fs_resize or sudo /usr/local/bin/fs_resize"
echo -e "to remove this message run:"
echo -e "sudo rm /usr/local/bin/fs_resize_warning"
echo -e "***********************************************\033[22m\033[37m"
setterm -default

_EOF_

chmod +x /usr/local/bin/fs_resize_warning > /dev/null 2>&1


if [ ! "${ONLY_BASE}" = "yes" ] ; then
# ******************************************
# ADJUST .bashrc to start tmux in fb console
cat >> /root/.bashrc << _EOF_

if [ "\$TERM" = "linux" ]; then
  if [[ ! \$TERM =~ screen ]]; then
      exec tmux
  fi
fi
if [ -f /usr/local/bin/fs_resize_warning ]; then
. /usr/local/bin/fs_resize_warning
fi
_EOF_

cat >> /home/$USER/.bashrc << _EOF_

if [ "\$TERM" = "linux" ]; then
  if [[ ! \$TERM =~ screen ]]; then
      exec tmux
  fi
fi
if [ -f /usr/local/bin/fs_resize_warning ]; then
. /usr/local/bin/fs_resize_warning
fi

_EOF_

# *********************************************
# Enable serial console and 3 virtual terminals
if [ "${_DST}" = "Ubuntu" ]; then
cat > /etc/init/ttyS0.conf << _EOF_
# ttyS0 - getty
#
# This service maintains a getty on ttyS0 from the point the system is
# started until it is shut down again.

start on stopped rc or RUNLEVEL=[12345]
stop on runlevel [!12345]

respawn
exec /sbin/getty -L 115200 ttyS0 vt102
_EOF_
rm /etc/init/tty4.conf > /dev/null 2>&1
rm /etc/init/tty5.conf > /dev/null 2>&1
rm /etc/init/tty6.conf > /dev/null 2>&1
else
    echo "S0:23:respawn:/sbin/getty -L ttyS0 115200 vt102" >> /etc/inittab
    ln -sf /usr/lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@tty2.service 
    ln -sf /usr/lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@tty2.service 
fi

# Set console Fixed font
if [ -f /etc/default/console-setup ]; then
cat /etc/default/console-setup | sed s/"FONTFACE=\"VGA\""/"FONTFACE=\"Fixed\""/g > /tmp/_consset
mv /tmp/_consset /etc/default/console-setup
fi
else
cat >> /root/.bashrc << _EOF_

if [ -f /usr/local/bin/fs_resize_warning ]; then
. /usr/local/bin/fs_resize_warning
fi
_EOF_

cat >> /home/$USER/.bashrc << _EOF_

if [ -f /usr/local/bin/fs_resize_warning ]; then
. /usr/local/bin/fs_resize_warning
fi

_EOF_
fi

}
_excode=0

# ---- Internal: wait for process to end --------
proc_wait() {
    spin='-\|/'

    i=0
    while kill -0 $1 2>/dev/null
    do
      i=$(( (i+1) %4 ))
      printf "\r$2 ${spin:$i:1}"
      sleep .1
    done
    _excode=$?

    if [ $_excode -eq 0 ]
    then
      printf "\rOK.                        \n"
    else
      printf "\rERROR.                     \n"
      exit 1
    fi
}
# -----------------------------------------------



# ====================================================

if [ ! -f /debootstrap/debootstrap ]; then
    exit 1
fi


echo "DEBOOTSTRAP, SECOND-STAGE"
/debootstrap/debootstrap --second-stage  &
pid=$! # Process Id of the previous running command
sleep 0.2
echo -e "\033[1A\033[K"
proc_wait $pid "please wait"

if [ ! $_excode -eq 0 ]; then
  echo "*********************"
  echo "** debootstrap ERROR."
  echo "*********************"
  exit 1
fi

echo "DEBOOTSTRAP, SECOND-STAGE FINISHED."
sleep 1

_apt="-y"

mv /sources.list /etc/apt/sources.list
echo "LANG=\"$LANG\"" > /etc/default/locale
echo "LC_ALL=\"$LANG\"" >> /etc/default/locale

export LANG=${LANG}
echo ""
export LC_ALL=${LANG}
sleep 0.1
echo -e "\033[1A\033[K"
export LANGUAGE=${LANGUAGE}

set_network

#apt-key adv --keyserver keyserver.ubuntu.com --recv-keys AB19BAC9 >> $_LOGFILE 2>&1

#---------------------------------------------------------------------
if [ -f /etc/init.d/udev ]; then
    cat /etc/init.d/udev | sed '/### END INIT INFO/a\exit 0' > /tmp/_udev_
    mv /tmp/_udev_ /etc/init.d/udev
fi
#---------------------------------------------------------------------

if [ "${raspbian}" = "yes" ] ; then
    wget https://archive.raspbian.org/raspbian.public.key
    apt-key add raspbian.public.key
fi

echo "======================="
echo "Updating & upgrading..."
apt-get ${_apt} update  &
pid=$!
proc_wait $pid "please wait"
apt-get ${_apt} upgrade  &
pid=$!
proc_wait $pid "please wait"
apt-get clean 

# ============================================
# prevent services from starting automatically
#---------------------------------------------
cat << EOD > /usr/sbin/policy-rc.d
#!/bin/sh
echo "rc.d operations disabled for chroot"
exit 101
EOD
chmod 0755 /usr/sbin/policy-rc.d
#---------------------------------------------

echo "Installing essential packages..."
apt-get ${_apt} install lsb-release  &
pid=$!
proc_wait $pid "please be patient"
apt-get clean 


_DST=`lsb_release -si`
_REL=`lsb_release -sc`
echo ""
echo -e "\033[31m\033[1m*** Installing $_DST $_REL ***\033[22m\033[37m"
echo ""

#apt-get ${_apt} install udev policykit-1 >> $_LOGFILE 2>&1 &
#pid=$!
#proc_wait $pid "please wait"
#apt-get clean >> $_LOGFILE 2>&1

#if [ "${_REL}" = "vivid" ] ; then
#    echo "Installing upstart-sysv (vivid)..."
#    apt-get ${_apt} install upstart-sysv >> $_LOGFILE 2>&1 &
#    pid=$!
#    proc_wait $pid "please wait"
#    apt-get clean >> $_LOGFILE 2>&1
#fi


if [ "${ONLY_BASE}" = "yes" ] ; then
    echo "Installing base packages..."
    apt-get ${_apt} install sudo isc-dhcp-client netbase ifupdown iproute network-manager --no-install-recommends  &
    pid=$!
    proc_wait $pid "please be patient"
    apt-get clean 
    
else
    echo "Installing base packages..."
    apt-get ${_apt} install udev apt-utils locales dialog sudo isc-dhcp-client netbase ifupdown iproute openssh-server iputils-ping wget curl ntpdate ntp less tzdata console-common module-init-tools u-boot-tools initramfs-tools keyboard-configuration console-setup xz-utils fbset --no-install-recommends  &
    pid=$!
    proc_wait $pid "please be patient"
    apt-get clean 

    # ** INSTALL base language pack for your language
    if [ "${_DST}" = "Ubuntu" ] ; then
	echo "Installing language pack..."
	apt-get ${_apt} install language-pack-$LANGUAGE-base --no-install-recommends  &
	pid=$!
	proc_wait $pid "please wait"
	apt-get clean 
    else
	cat /etc/locale.gen | sed s/"# $LANG"/"$LANG"/g > /tmp/locale.gen
	mv /tmp/locale.gen /etc/locale.gen
	locale-gen 
    fi

    # ** INSTALL more usefull packages ....
    # apt-get -y install wireless-tools wpasupplicant axel build-essential git whiptail unzip
    echo "Installing more packages..."
    apt-get ${_apt} install nano mc htop man-db tmux dbus btrfs-tools net-tools ethtool uuid iw lshw network-manager rsync usbutils hdparm i2c-tools parted dosfstools --no-install-recommends  &
    pid=$!
    proc_wait $pid "please wait"
    apt-get clean 
fi

rm -Rf /boot/* 

if ! [ "${ONLY_BASE}" = "yes" ] ; then
    # ** CONFIGURE time zone, keyboard layout, console ...
    echo "Configuring, please wait..."
    if [ ! "${_timezone}" = "" ] ; then
	echo $_timezone > /etc/timezone
    fi
    echo "*** LOCALE ***" 
    locale-gen $LANG 
    echo "*** TZDATA ***" 
    dpkg-reconfigure tzdata 
    echo "*** KEYBOARD ***" 
    dpkg-reconfigure keyboard-configuration 
    echo "*** LOCALES ***" 
    dpkg-reconfigure locales 
    echo "*** CONSOLE ***" 
    dpkg-reconfigure console-setup
fi

echo "*** USER/PASSWORD ***" 
# ** CREATE root password
echo "CREATING root PASSWORD..."
#passwd
echo root:$ROOTPASS | chpasswd

# ** ADD USER
echo "ADDING USER..."
# set default shell to /bin/bash
cat /etc/default/useradd | sed s/"SHELL=\/bin\/sh"/"SHELL=\/bin\/bash"/g > /tmp/useradd
mv /tmp/useradd /etc/default/useradd
useradd -m -s "/bin/bash" $USER 
echo $USER:$USERPASS | chpasswd
usermod -c $USER $USER 
adduser $USER sudo 

if ! [ "${ONLY_BASE}" = "yes" ] ; then
    # ** Tricks
    do_tricks

    # ENABLE SSH ROOT LOOGIN WITH PASSWORD
    if [ -f /etc/ssh/sshd_config ]; then
	cat /etc/ssh/sshd_config | sed s/"PermitRootLogin without-password"/"PermitRootLogin yes"/g > /tmp/sshd_config
	mv /tmp/sshd_config /etc/ssh/sshd_config
    fi
    #----------------------------------------------------
    if [ -f /etc/init.d/udev ]; then
	cat /etc/init.d/udev | sed '/^exit 0/d' > /tmp/_udev_
	mv /tmp/_udev_ /etc/init.d/udev
	echo "exit 0" >> /etc/init.d/udev
	chmod +x /etc/init.d/udev
    fi
    #----------------------------------------------------
    killall -KILL ntpd > /dev/null 2>&1
    killall -KILL smbd > /dev/null 2>&1
fi

chown -R $USER:$USER /home/$USER

rm /usr/sbin/policy-rc.d

echo ""
echo "Instalation finished."
echo ""
touch /_OK_

exit 0
